/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.app.renderer;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellEditor;
import myftp.app.model.TransfertTableModel;
import myftp.app.view.listener.PauseActionListener;
import myftp.app.view.listener.RestartActionListener;
import myftp.app.view.listener.StopActionListener;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 * Editeur pour le tableau des transferts
 */
public class TransfertTableEditor extends AbstractCellEditor
        implements TableCellEditor,
        ActionListener {

    /**
     * Texte d'une case
     * @var label
     */
    private JLabel label = new JLabel();
    /**
     * Bouton d'une case
     * @var button
     */
    private JButton button = null;
    /**
     * Tableau des transferts
     * @var transfertsTable
     */
    private TransfertTableModel transfertsTable;

    /**
     * Constructeur TransfertTableEditor
     * @param aTransfertsTable
     */
    public TransfertTableEditor(TransfertTableModel aTransfertsTable) {
        super();
        this.transfertsTable = aTransfertsTable;
    }

    public void actionPerformed(ActionEvent e) {
    }

    public Component getTableCellEditorComponent(
            JTable table, Object value, boolean isSelected, int row, int column) {


        Component comp = null;
        /* Récupération du statut du transfert */
        String statut = table.getValueAt(row, 2).toString();

        /* Pour la colonne des boutons 'pause' ou 'reprendre' */
        if (column == 4) {

            /* Si le transfert est en cours */
            if (statut.equals("En cours...")) {
                button = new JButton("Pause");
                /* Ajout du listener pour l'action de mise en pause */
                button.addActionListener(new PauseActionListener(row, transfertsTable));
                /* Activation du bouton */
                button.setVisible(true);
                button.setEnabled(true);
                /* Le composant à retourner est ce bouton */
                comp = button;

            } else {
                /* Si le transfert a été mis en attente */
                if (statut.equals("En attente...")) {
                    /* Ajout d'un bouton 'Reprendre' */
                    button = new JButton("Reprendre");
                    /* Ajout du listener pour l'action de reprise */
                    button.addActionListener(new RestartActionListener(row, transfertsTable));
                    /* Activation du bouton */
                    button.setVisible(true);
                    button.setEnabled(true);
                    /* Le composant à retourner est ce bouton */
                    comp = button;

                } else {
                    /* Sinon, c'est que le transfert est terminé (ou annulé) */
                    label.setOpaque(true);
                    label.setText("Téléchargement ");
                    label.setHorizontalAlignment(SwingConstants.RIGHT);
                    /* Le composant à retourner est le texte 'Téléchargement' */
                    comp = label;
                }
            }

        } else {

            /* Pour la colonne des boutons d'annulation */
            if (column == 5) {
                /* Si le transfert n'est pas terminé (ou annulé) */
                if (!statut.equals("Terminé") && !statut.equals("Annulé")) {
                    /* Ajout d'un bouton 'Stop' */
                    button = new JButton("Stop");
                    /* Ajout du listener pour l'action d'annulation */
                    button.addActionListener(new StopActionListener(row, transfertsTable));
                    /* Activation du bouton */
                    button.setVisible(true);
                    button.setEnabled(true);
                    /* Le composant à retourner est ce bouton */
                    comp = button;

                } else {
                    /* Si le transfert est clos */
                    label.setOpaque(true);
                    label.setText(" " + statut);
                    label.setHorizontalAlignment(SwingConstants.LEFT);
                    /* Le composant à retourner est le texte du statut
                    ("annulé" ou "terminé") */
                    comp = label;
                }

            } else {
                /* Pour les autres colonnes (sauf la barre de progression) */

                label.setHorizontalAlignment(SwingConstants.LEFT);
                label.setOpaque(true);
                label.setText(value.toString());


                /* Coloration de la ligne en fonction du statut du transfert */
                if (statut.equals("En cours...")) {
                    label.setBackground(Color.orange);
                }
                if (statut.equals("En attente...")) {
                    label.setBackground(Color.cyan);
                }
                if (statut.equals("Annulé")) {
                    label.setBackground(Color.red);
                }
                if (statut.equals("Terminé")) {
                    label.setBackground(Color.green);
                }

                /* Le composant à retourner est le texte */
                comp = label;
            }
        }
        return comp;
    }

    public Object getCellEditorValue() {
        return true;
    }
}
